This repository has no description
1.6 kB
52 lines
1import type { Metadata } from 'next';
2import Header from '@/components/navigation/header/Header';
3import ProfileHeader from '@/features/profile/components/profileHeader/ProfileHeader';
4import ProfileTabs from '@/features/profile/components/profileTabs/ProfileTabs';
5import { Box, Container } from '@mantine/core';
6import { Fragment, Suspense } from 'react';
7import ProfileHeaderSkeleton from '@/features/profile/components/profileHeader/Skeleton.ProfileHeader';
8import BackButton from '@/components/navigation/backButton/BackButton';
9import { getProfile } from '@/features/profile/lib/dal';
10
11interface Props {
12 params: Promise<{ handle: string }>;
13 children: React.ReactNode;
14}
15
16export async function generateMetadata({ params }: Props): Promise<Metadata> {
17 const { handle } = await params;
18 const profile = await getProfile(handle);
19
20 return {
21 title: profile.name,
22 description:
23 profile.description ?? `Explore ${profile.name}'s profile on Semble`,
24 };
25}
26
27export default async function Layout(props: Props) {
28 const { handle } = await props.params;
29
30 return (
31 <Fragment>
32 <Header>
33 <BackButton href="/home">Home</BackButton>
34 </Header>
35 <Suspense fallback={<ProfileHeaderSkeleton />} key={handle}>
36 <ProfileHeader handle={handle} />
37 </Suspense>
38 <Box
39 style={{
40 position: 'sticky',
41 top: 59,
42 zIndex: 1,
43 }}
44 >
45 <Container px={'xs'} mt={'md'} size={'xl'}>
46 <ProfileTabs handle={handle} />
47 </Container>
48 </Box>
49 {props.children}
50 </Fragment>
51 );
52}